package cliente;

import comum.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

public class RN_Mesa {

    private String jogadorDaVez; //Deveria ser uma String com nick, apenas. Jogador d� visibilidade
    					  //para mao de Cartas de cada jogador
    private HashMap<String,Integer> numeroDeCartas;
    private Set<RN_Carta> ultimoDescarte;
    private ArrayList<String> jogadoresNaMesa;

    public RN_Mesa() {
        this.numeroDeCartas = new HashMap<String, Integer>();
        this.ultimoDescarte = new LinkedHashSet<RN_Carta>();
    }

    public void atualizarMesa(Set<RN_Carta> selecao){
        //TODO No diagram de classe nenhum arg passado. 
        this.ultimoDescarte = selecao;
    }
    
    public String getJogadorDaVez() {
        return jogadorDaVez;
    }

    public void setJogadorDaVez(String jogadorDaVez) {
        this.jogadorDaVez = jogadorDaVez;
    }

    public HashMap<String, Integer> getNumeroDeCartas() {
        return numeroDeCartas;
    }

    public void setNumeroDeCartas(HashMap<String, Integer> numeroDeCartas) {
        this.numeroDeCartas = numeroDeCartas;
    }

    public Set<RN_Carta> getUltimoDescarte() {
        return ultimoDescarte;
    }

    public void setUltimoDescarte(Set<RN_Carta> ultimoDescarte) {
        this.ultimoDescarte = ultimoDescarte;
    }
    
    public void setNumeroDeCartasDoJogador(String nome, Integer num) {
    	numeroDeCartas.put(nome, num);
    }

    public ArrayList<String> getJogadoresNaMesa() {
        return jogadoresNaMesa;
    }

    public void carregaMesaComumEmRN_Mesa(Mesa mesa){
        /* Chamado por: RN_Partida, VF1
         * Caso de uso: Atualizar Mesa */

        this.setJogadorDaVez(mesa.getJogadorDaVez());
        this.setNumeroDeCartas(mesa.getNumeroDeCartas());
        
        HashSet<RN_Carta> ultimodescarte = new HashSet<RN_Carta>();
        for(CartaComum carta : mesa.getUltimoDescarte()){
            ultimodescarte.add(new RN_Carta(carta));
        }

        this.atualizarMesa(ultimodescarte);
        this.atualizarJogadoresNaMesa();
    }

    private void atualizarJogadoresNaMesa() {
        jogadoresNaMesa = new ArrayList<String>();
        for(String nome : getNumeroDeCartas().keySet()){
            if(!nome.equals(RN_Jogador.getRN_Jogador().getNome())) jogadoresNaMesa.add(nome);
        }
    }

}
